package com.itheima.类加载与反射.反射.案例五;

import java.lang.reflect.Method;
import java.util.Properties;

//需求: 基于反射设计一套程序,能够实现代码不变,改改配置文件就能动态切换运行不同类对象的不同方法
public class Test {
    public static void main(String[] args) throws Exception {
        //1. 构建一个Properties,读取prop.properties中的配置信息进内存
        Properties prop = new Properties();
        //prop.load(ClassLoader.getSystemClassLoader().getResourceAsStream("prop.properties"));
        prop.load(Test.class.getClassLoader().getResourceAsStream("prop.properties"));

        //1. 反射获取类对象
        Class clazz = Class.forName(prop.getProperty("className"));
        //2. 反射获取要运行的方法对象
        Method method = clazz.getDeclaredMethod(prop.getProperty("methodName"));
        //2.1 暴力反射
        method.setAccessible(true);
        //3. 反射构建类的对象
        Object obj = clazz.newInstance();
        //4. 反射调用方法
        method.invoke(obj);
    }
}